package com.sungardas.enhancedsnapshots.aws; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.regions.Region; import com.amazonaws.regions.Regions; import com.amazonaws.services.autoscaling.AmazonAutoScaling; import com.amazonaws.services.autoscaling.AmazonAutoScalingClient; import com.amazonaws.services.cloudformation.AmazonCloudFormation; import com.amazonaws.services.cloudformation.AmazonCloudFormationClient; import com.amazonaws.services.cloudwatch.AmazonCloudWatch; import com.amazonaws.services.cloudwatch.AmazonCloudWatchClient; import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient; import com.amazonaws.services.ec2.AmazonEC2; import com.amazonaws.services.ec2.AmazonEC2Client; import com.amazonaws.services.elasticloadbalancing.AmazonElasticLoadBalancing; import com.amazonaws.services.elasticloadbalancing.AmazonElasticLoadBalancingClient; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.sns.AmazonSNS; import com.amazonaws.services.sns.AmazonSNSClient; import com.amazonaws.services.sqs.AmazonSQS; import com.amazonaws.services.sqs.AmazonSQSClient; import com.sungardas.enhancedsnapshots.service.CryptoService; import com.sungardas.enhancedsnapshots.service.impl.CryptoServiceImpl; import org.socialsignin.spring.data.dynamodb.repository.config.EnableDynamoDBRepositories; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; @Configuration @Profile("dev") @EnableDynamoDBRepositories(basePackages = "com.sungardas.enhancedsnapshots.aws.dynamodb.repository", dynamoDBMapperConfigRef = "dynamoDBMapperConfig") public class AmazonConfigProviderDEV extends AmazonConfigProvider { @Value("${amazon.aws.accesskey}") private String amazonAWSAccessKey; @Value("${amazon.aws.secretkey}") private String amazonAWSSecretKey; @Value("${sungardas.worker.configuration}") private String configurationId; @Value("${amazon.aws.region}") private String region; private CryptoService cryptoService = new CryptoServiceImpl(); private AWSCredentials awsCredentials; @Bean public AWSCredentials awsCredentials() { if(awsCredentials == null) { String accessKey = cryptoService.decrypt(configurationId, amazonAWSAccessKey); String secretKey = cryptoService.decrypt(configurationId, amazonAWSSecretKey); awsCredentials = new BasicAWSCredentials(accessKey, secretKey); } return awsCredentials; } @Bean(name = "dynamoDB") @Override public AmazonDynamoDB amazonDynamoDB() { AmazonDynamoDB amazonDynamoDB = new AmazonDynamoDBClient(awsCredentials()); amazonDynamoDB.setRegion(getRegion()); return amazonDynamoDB; } @Override protected AmazonEC2 amazonEC2() { AmazonEC2 amazonEC2 = new AmazonEC2Client(awsCredentials()); amazonEC2.setRegion(getRegion()); return amazonEC2; } @Override protected AmazonS3 amazonS3() { AmazonS3 amazonS3 = new AmazonS3Client(awsCredentials()); Region current = getRegion(); if (!current.equals(Region.getRegion(Regions.US_EAST_1))) { amazonS3.setRegion(current); } return amazonS3; } @Override protected AmazonSNS amazonSNSClient() { AmazonSNSClient snsClient = new AmazonSNSClient(awsCredentials()); snsClient.setRegion(getRegion()); return snsClient; } @Override protected AmazonSQS amazonSQSClient() { AmazonSQSClient sqsClient = new AmazonSQSClient(awsCredentials()); sqsClient.setRegion(getRegion()); return sqsClient; } @Override protected AmazonAutoScaling autoScalingClient() { AmazonAutoScalingClient autoScalingClient = new AmazonAutoScalingClient(awsCredentials()); autoScalingClient.setRegion(getRegion()); return autoScalingClient; } @Override protected AmazonElasticLoadBalancing elasticLoadBalancingClient() { AmazonElasticLoadBalancingClient elasticLoadBalancingClient = new AmazonElasticLoadBalancingClient(awsCredentials()); elasticLoadBalancingClient.setRegion(getRegion()); return elasticLoadBalancingClient; } @Override protected AmazonCloudFormation amazonCloudFormationClient() { AmazonCloudFormation amazonCloudFormation = new AmazonCloudFormationClient(awsCredentials()); amazonCloudFormation.setRegion(getRegion()); return amazonCloudFormation; } protected AmazonCloudWatch cloudWatchClient() { AmazonCloudWatchClient cloudWatchClient = new AmazonCloudWatchClient(awsCredentials()); cloudWatchClient.setRegion(getRegion()); return cloudWatchClient; } @Override protected Region getRegion (){ return Region.getRegion(Regions.fromName(region)); } public static String getDynamoDbPrefix(String systemId) { return "ENHANCEDSNAPSHOTS_" + systemId + "_"; } }